package com.chebaohui.iqs.service.impl.deal.bihu.utils;

import java.util.ArrayList;
import java.util.List;

import com.chebaohui.iqs.config.CompanyCode;

/**
 * 壁虎保险公司枚举值工具类
 * 
 * @author xielonghai
 *
 */
public class EnumUtil {

	/**
	 * 将壁虎保险公司枚举值的和分解出来
	 * 
	 * @param source
	 *            枚举值的和
	 * @return
	 * @throws Exception
	 */
	public static List<Double> getCombination(double source) throws Exception {
		List<Double> res = new ArrayList<>();
		double num = source;
		for (int m = 20; m > -1; m--) {
			if ((num - Math.pow(2, m)) >= 0) {
				num = num - Math.pow(2, m);
				res.add(Math.pow(2, m));
			}
		}

		double val = 0;
		for (double d : res) {
			val += d;
		}
		if (val != source)
			throw new Exception("枚举和解析工具类错误...");

		return res;
	}

	/**
	 * 获取保险公司
	 * 
	 * @param source
	 *            传入一个double类型的参数
	 * @return 对应的保险公司
	 */
	public static CompanyCode getSource(double source) {
		CompanyCode cc = null;
		// 对枚举类的values遍历
		for (CompanyCode cc1 : CompanyCode.values()) {
			// 判断传入的double与value属性中的source 是否相等
			if (source == cc1.getSource()) {
				cc = cc1;

				return cc;
			}
		}
		return cc;
	}

	/**
	 * 根据编码获取保险公司枚举
	 * 
	 * @param code
	 * @return
	 */
	public static CompanyCode getCompany(String code) {
		for (CompanyCode cc : CompanyCode.values()) {
			if (cc.getCode().equals(code))
				return cc;
		}
		return null;
	}

}
